﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LearnCSharp
{
    /*
        * *************************************************************************************
        * *************************************************************************************
        *                                      POINTEUR
        * *************************************************************************************
        * *************************************************************************************
    */

    /// <summary> PointeurCSharp </summary>
    public class PointeurCSharp
    {
        // unsafe pour indiquer du code avec pointeur : Penser à cocher l'option dans Propriétés du projet -> Générer -> Général -> option : "Autorise du code Unsafe"
        static unsafe void TestPointeur()
        {
            int i = 23; // Variable sur la pire
            int* pi;    // Pointeur sur un int
            pi = &i;    // Pointeur prend la référence de i : il pointe vers i 
            *pi = 50;   // changement de la valeur du pointeur et donc de la variable i


            int[] ti = new int[100];
            // fixed : fixe le pointeur (non modifiable) car c'est un pointeur vers la première cellule du tableau, hors il faut pas laisser le système pourvoir déplacer ce pointeur 
            // pour sa gestion de la mémoire
            fixed (int* pt = ti)
            {
                for (i = 0; i < ti.Length; i++)
                    pt[i] = i;
            }

            // stackalloc : Réservation de 1000 int directe sur la pile et non pas en mémoire donc plus rapide mais pas extensible etlimité en taille
            int* pj = stackalloc int[1000];
        }
    }
}
